Solid-state drives (herein “SSDs”) store data persistently in solid-state memory such as NAND flash memory. SSDs offer advantages over traditional hard disk drives (herein “HDDs”), such as improved resistance to mechanical shock, lower power consumption, and faster access times. SSDs have a different set of operating constraints than hard disk drives. As a first example, SSDs can be programmed with high granularity (e.g., at the byte or word level), but must be erased with far less granularity (e.g., at the block level). As a second example, SSDs typically require that a write operation span physically sequential flash pages. As a third example, SSDs have longer erase times than read times or write times. As a fourth example, each block in an SSD can only endure a limited number of erase cycles.
Many storage devices, including SSDs, are used in conjunction with file systems which provide procedures to store, retrieve, and modify data. Other responsibilities of the file system include ensuring data integrity and controlling access to data. File systems are often tuned to the specific characteristics of the storage device. File systems organize the data stored on storage devices in an efficient manner and also manage the available space on the storage devices. Some file systems use storage virtualization to organize data and manage available space. Storage virtualization creates one or more virtual partitions (virtual devices) of the physical storage device, and abstracts the virtual devices (herein “vdevs”) from the physical storage device. This separation allows the administrators of a storage system greater flexibility in how they manage storage for end users. For example, a file system allows an administrator to concatenate data partitions into larger virtual ones to move data, potentially without interrupting system use.